/**
 * @fileOverview Image plugin
 */
(function() {

   VED.plugins.add( 'image', {
      requires: 'dialog',
      lang: 'en,ru', // %REMOVE_LINE_CORE%
      icons: 'image', // %REMOVE_LINE_CORE%
      hidpi: true, // %REMOVE_LINE_CORE%
      init: function( editor ) {
         var pluginName = 'image';

         // Register the dialog.
         VED.dialog.add( pluginName, this.path + 'dialogs/image.js' );

         var allowed = 'img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}',
            required = 'img[alt,src]';

         if ( VED.dialog.isTabEnabled( editor, pluginName, 'advanced' ) )
            allowed = 'img[alt,dir,id,lang,longdesc,!src,title]{*}(*)';

         // Register the command.
         editor.addCommand( pluginName, new VED.dialogCommand( pluginName, {
            allowedContent: allowed,
            requiredContent: required,
            contentTransformations: [
               [ 'img{width}: sizeToStyle', 'img[width]: sizeToAttribute' ],
               [ 'img{float}: alignmentToStyle', 'img[align]: alignmentToAttribute' ]
            ]
         } ) );

         // Register the toolbar button.
         editor.ui.addButton && editor.ui.addButton( 'Image', {
            label: editor.lang.common.image,
            command: pluginName,
            toolbar: 'insert,10'
         });

         editor.on( 'doubleclick', function( evt ) {
            var element = evt.data.element;

            if ( element.is( 'img' ) && !element.data( 'ved-realelement' ) && !element.isReadOnly() )
               evt.data.dialog = 'image';
         });

         // If the "menu" plugin is loaded, register the menu items.
         if ( editor.addMenuItems ) {
            editor.addMenuItems({
               image: {
                  label: editor.lang.image.menu,
                  command: 'image',
                  group: 'image'
               }
            });
         }

         // If the "contextmenu" plugin is loaded, register the listeners.
         if ( editor.contextMenu ) {
            editor.contextMenu.addListener( function( element, selection ) {
               if ( getSelectedImage( editor, element ) )
                  return { image: VED.TRISTATE_OFF };
            });
         }
      },
      afterInit: function( editor ) {
         // Customize the behavior of the alignment commands. (#7430)
         setupAlignCommand( 'left' );
         setupAlignCommand( 'right' );
         setupAlignCommand( 'center' );
         setupAlignCommand( 'block' );

         function setupAlignCommand( value ) {
            var command = editor.getCommand( 'justify' + value );
            if ( command ) {
               if ( value == 'left' || value == 'right' ) {
                  command.on( 'exec', function( evt ) {
                     var img = getSelectedImage( editor ),
                        align;
                     if ( img ) {
                        align = getImageAlignment( img );
                        if ( align == value ) {
                           img.removeStyle( 'float' );

                           // Remove "align" attribute when necessary.
                           if ( value == getImageAlignment( img ) )
                              img.removeAttribute( 'align' );
                        } else
                           img.setStyle( 'float', value );

                        evt.cancel();
                     }
                  });
               }

               command.on( 'refresh', function( evt ) {
                  var img = getSelectedImage( editor ),
                     align;
                  if ( img ) {
                     align = getImageAlignment( img );

                     this.setState(
                     ( align == value ) ? VED.TRISTATE_ON : ( value == 'right' || value == 'left' ) ? VED.TRISTATE_OFF : VED.TRISTATE_DISABLED );

                     evt.cancel();
                  }
               });
            }
         }
      }
   });

   function getSelectedImage( editor, element ) {
      if ( !element ) {
         var sel = editor.getSelection();
         element = sel.getSelectedElement();
      }

      if ( element && element.is( 'img' ) && !element.data( 'ved-realelement' ) && !element.isReadOnly() )
         return element;
   }

   function getImageAlignment( element ) {
      var align = element.getStyle( 'float' );

      if ( align == 'inherit' || align == 'none' )
         align = 0;

      if ( !align )
         align = element.getAttribute( 'align' );

      return align;
   }

})();

VED.config.image_removeLinkByEmptyURL = true;





